home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 30 / Amiga Format AFCD30 (Sep 1998, Issue 114).iso / -screenplay- / otherstuff / quake_add_ons / ogresaw / ogre.qc next >
Text File  |  1998-07-02  |  20KB  |  501 lines

  1. /*
  2. ==============================================================================
  3.  
  4. OGRE - Modified by Dave Weiden (Weiden@Trenton.EDU) 9/20/96
  5.  
  6. ==============================================================================
  7. */
  8.  
  9. $cd /raid/quake/id1/models/ogre_c
  10. $origin 0 0 24
  11. $base base              
  12. $skin base
  13.  
  14. $frame  stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9
  15.  
  16. $frame walk1 walk2 walk3 walk4 walk5 walk6 walk7
  17. $frame walk8 walk9 walk10 walk11 walk12 walk13 walk14 walk15 walk16
  18.  
  19. $frame run1 run2 run3 run4 run5 run6 run7 run8
  20.  
  21. $frame swing1 swing2 swing3 swing4 swing5 swing6 swing7
  22. $frame swing8 swing9 swing10 swing11 swing12 swing13 swing14
  23.  
  24. $frame smash1 smash2 smash3 smash4 smash5 smash6 smash7
  25. $frame smash8 smash9 smash10 smash11 smash12 smash13 smash14
  26.  
  27. $frame shoot1 shoot2 shoot3 shoot4 shoot5 shoot6
  28.  
  29. $frame pain1 pain2 pain3 pain4 pain5
  30.  
  31. $frame painb1 painb2 painb3
  32.  
  33. $frame painc1 painc2 painc3 painc4 painc5 painc6
  34.  
  35. $frame paind1 paind2 paind3 paind4 paind5 paind6 paind7 paind8 paind9 paind10
  36. $frame paind11 paind12 paind13 paind14 paind15 paind16
  37.  
  38. $frame paine1 paine2 paine3 paine4 paine5 paine6 paine7 paine8 paine9 paine10
  39. $frame paine11 paine12 paine13 paine14 paine15
  40.  
  41. $frame death1 death2 death3 death4 death5 death6
  42. $frame death7 death8 death9 death10 death11 death12
  43. $frame death13 death14
  44.  
  45. $frame bdeath1 bdeath2 bdeath3 bdeath4 bdeath5 bdeath6
  46. $frame bdeath7 bdeath8 bdeath9 bdeath10
  47.  
  48. $frame pull1 pull2 pull3 pull4 pull5 pull6 pull7 pull8 pull9 pull10 pull11
  49.  
  50. //=============================================================================
  51.  
  52.  
  53. void() OgreGrenadeExplode =
  54. {
  55.     T_RadiusDamage (self, self.owner, 40, world);
  56.     sound (self, CHAN_VOICE, "weapons/r_exp3.wav", 1, ATTN_NORM);
  57.  
  58.     WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
  59.     WriteByte (MSG_BROADCAST, TE_EXPLOSION);
  60.     WriteCoord (MSG_BROADCAST, self.origin_x);
  61.     WriteCoord (MSG_BROADCAST, self.origin_y);
  62.     WriteCoord (MSG_BROADCAST, self.origin_z);
  63.  
  64.     self.velocity = '0 0 0';
  65.     self.touch = SUB_Null;
  66.     setmodel (self, "progs/s_explod.spr");
  67.     self.solid = SOLID_NOT;
  68.     s_explode1 ();
  69. };
  70.  
  71. void() OgreGrenadeTouch =
  72. {
  73.     if (other == self.owner)
  74.         return;         // don't explode on owner
  75.     if (other.takedamage == DAMAGE_AIM)
  76.     {
  77.         OgreGrenadeExplode();
  78.         return;
  79.     }
  80.     sound (self, CHAN_VOICE, "weapons/bounce.wav", 1, ATTN_NORM);   // bounce sound
  81.     if (self.velocity == '0 0 0')
  82.         self.avelocity = '0 0 0';
  83. };
  84.  
  85. /*
  86. ================
  87. OgreFireGrenade
  88. ================
  89. */
  90. void() OgreFireGrenade =
  91. {
  92.     local   entity missile, mpuff;
  93.     
  94.     self.effects = self.effects | EF_MUZZLEFLASH;
  95.  
  96.     sound (self, CHAN_WEAPON, "weapons/grenade.wav", 1, ATTN_NORM);
  97.  
  98.     missile = spawn ();
  99.     missile.owner = self;
  100.     missile.movetype = MOVETYPE_BOUNCE;
  101.     missile.solid = SOLID_BBOX;
  102.         
  103. // set missile speed    
  104.  
  105.     makevectors (self.angles);
  106.  
  107.     missile.velocity = normalize(self.enemy.origin - self.origin);
  108.     missile.velocity = missile.velocity * 600;
  109.     missile.velocity_z = 200;
  110.  
  111.     missile.avelocity = '300 300 300';
  112.  
  113.     missile.angles = vectoangles(missile.velocity);
  114.     
  115.     missile.touch = OgreGrenadeTouch;
  116.     
  117. // set missile duration
  118.     missile.nextthink = time + 2.5;
  119.     missile.think = OgreGrenadeExplode;
  120.  
  121.     setmodel (missile, "progs/grenade.mdl");
  122.     setsize (missile, '0 0 0', '0 0 0');            
  123.     setorigin (missile, self.origin);
  124. };
  125.  
  126.  
  127. //=============================================================================    Dave's modified Ogre!  
  128.  
  129. /*
  130. ================
  131. chainsaw
  132.  
  133. FIXME
  134. ================
  135. */
  136. void(float side) chainsaw =
  137. {
  138. local vector    delta;
  139. local float     ldmg;
  140.  
  141.     if (!self.enemy)
  142.         return;
  143.     if (!CanDamage (self.enemy, self))
  144.         return;
  145.  
  146.     ai_charge(10);
  147.  
  148.     delta = self.enemy.origin - self.origin;
  149.  
  150.     if (vlen(delta) > 100)
  151.         return;
  152.         
  153.     ldmg = (random() + random() + random()) * 4;
  154.     T_Damage (self.enemy, self, self, ldmg);
  155.     
  156.     if (side)
  157.     {
  158.         makevectors (self.angles);
  159.         if (side == 1)
  160.             SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);
  161.         else
  162.             SpawnMeatSpray (self.origin + v_forward*16, side * v_right);
  163.     }
  164. };
  165.  
  166.  
  167. void() ogre_stand1      =[      $stand1,        ogre_stand2     ] {ai_stand();};
  168. void() ogre_stand2      =[      $stand2,        ogre_stand3     ] {ai_stand();};
  169. void() ogre_stand3      =[      $stand3,        ogre_stand4     ] {ai_stand();};
  170. void() ogre_stand4      =[      $stand4,        ogre_stand5     ] {ai_stand();};
  171. void() ogre_stand5      =[      $stand5,        ogre_stand6     ] {
  172. if (random() < 0.2)
  173.     sound (self, CHAN_VOICE, "ogre/ogidle.wav", 1, ATTN_IDLE);
  174.     ai_stand();
  175. };
  176.  
  177. void() ogre_stand6      =[      $stand6,        ogre_stand7     ] {ai_stand();};
  178. void() ogre_stand7      =[      $stand7,        ogre_stand8     ] {ai_stand();};
  179. void() ogre_stand8      =[      $stand8,        ogre_stand9     ] {ai_stand();};
  180. void() ogre_stand9      =[      $stand9,        ogre_stand1     ] {ai_stand();};
  181.  
  182. void() ogre_walk1       =[      $walk1,         ogre_walk2      ] {ai_walk(3);};
  183. void() ogre_walk2       =[      $walk2,         ogre_walk3      ] {ai_walk(2);};
  184. void() ogre_walk3       =[      $walk3,         ogre_walk4      ] {
  185. ai_walk(2);
  186. if (random() < 0.2)
  187.     sound (self, CHAN_VOICE, "ogre/ogidle.wav", 1, ATTN_IDLE);
  188. };
  189. void() ogre_walk4       =[      $walk4,         ogre_walk5      ] {ai_walk(2);};
  190. void() ogre_walk5       =[      $walk5,         ogre_walk6      ] {ai_walk(2);};
  191. void() ogre_walk6       =[      $walk6,         ogre_walk7      ] {
  192. ai_walk(5);
  193. if (random() < 0.1)
  194.     sound (self, CHAN_VOICE, "ogre/ogdrag.wav", 1, ATTN_IDLE);
  195. };
  196. void() ogre_walk7       =[      $walk7,         ogre_walk8      ] {ai_walk(3);};
  197. void() ogre_walk8       =[      $walk8,         ogre_walk9      ] {ai_walk(2);};
  198. void() ogre_walk9       =[      $walk9,         ogre_walk10     ] {ai_walk(3);};
  199. void() ogre_walk10      =[      $walk10,        ogre_walk11     ] {ai_walk(1);};
  200. void() ogre_walk11      =[      $walk11,        ogre_walk12     ] {ai_walk(2);};
  201.  
  202.  
  203. //  CLIP HERE...
  204. //  HERE'S THE PULLING SCRIPT:
  205.  
  206. void() ogre_pull1       =[      $pull1,         ogre_pull2      ] {};
  207. void() ogre_pull2       =[      $pull2,         ogre_pull3      ] {};
  208. void() ogre_pull3       =[      $pull3,         ogre_pull4      ] {};
  209. void() ogre_pull4       =[      $pull4,         ogre_pull5      ] {};
  210. void() ogre_pull5       =[      $pull5,         ogre_pull6      ] {
  211.     sound (self, CHAN_VOICE, "ogre/ogidle2.wav", 1, ATTN_IDLE);
  212. };
  213. void() ogre_pull6       =[      $pull6,         ogre_pull7      ] {};
  214. void() ogre_pull7       =[      $pull7,         ogre_pull8      ] {};
  215. void() ogre_pull8       =[      $pull8,         ogre_pull9      ] {};
  216. void() ogre_pull9       =[      $pull9,         ogre_pull10     ] {};
  217. void() ogre_pull10      =[      $pull10,        ogre_pull11     ] {};
  218. void() ogre_pull11      =[      $pull11,        ogre_pull12     ] {};
  219. void() ogre_pull12      =[      $pull10,        ogre_pull13     ] {};
  220. void() ogre_pull13      =[      $pull9,         ogre_pull14     ] {};
  221. void() ogre_pull14      =[      $pull8,         ogre_pull15     ] {};
  222. void() ogre_pull15      =[      $pull6,         ogre_pull16     ] {};
  223. void() ogre_pull16      =[      $pull4,         ogre_walk13     ] {};
  224.  
  225. // END PULLING SCRIPT.
  226.  
  227. void() ogre_walk12      =[      $walk12,        ogre_check      ] {ai_walk(3);};
  228. void() ogre_walk13      =[      $walk13,        ogre_walk14     ] {ai_walk(3);};
  229. void() ogre_walk14      =[      $walk14,        ogre_walk15     ] {ai_walk(3);};
  230. void() ogre_walk15      =[      $walk15,        ogre_walk16     ] {ai_walk(3);};
  231. void() ogre_walk16      =[      $walk16,        ogre_walk1      ] {ai_walk(4);};
  232.  
  233. // ogre_check IS CALLED IN ogre_walk12, TO DETERMINE IF HE'LL PULL OR WALK ON.
  234. void() ogre_check =
  235.     {
  236.     ai_walk(3);
  237.     if (random() <0.25)
  238.         ogre_pull1 (); 
  239.     else
  240.         ogre_walk13 ();
  241.     };  
  242. //end ogre_check
  243. //  CLIP HERE...
  244.  
  245.  
  246. void() ogre_run1        =[      $run1,          ogre_run2       ] {ai_run(9);
  247. if (random() < 0.2)
  248.     sound (self, CHAN_VOICE, "ogre/ogidle2.wav", 1, ATTN_IDLE);
  249. };
  250. void() ogre_run2        =[      $run2,          ogre_run3       ] {ai_run(12);};
  251. void() ogre_run3        =[      $run3,          ogre_run4       ] {ai_run(8);};
  252. void() ogre_run4        =[      $run4,          ogre_run5       ] {ai_run(22);};
  253. void() ogre_run5        =[      $run5,          ogre_run6       ] {ai_run(16);};
  254. void() ogre_run6        =[      $run6,          ogre_run7       ] {ai_run(4);};
  255. void() ogre_run7        =[      $run7,          ogre_run8       ] {ai_run(13);};
  256. void() ogre_run8        =[      $run8,          ogre_run1       ] {ai_run(24);};
  257.  
  258. void() ogre_swing1      =[      $swing1,                ogre_swing2     ] {ai_charge(11);
  259. sound (self, CHAN_WEAPON, "ogre/ogsawatk.wav", 1, ATTN_NORM);
  260. };
  261. void() ogre_swing2      =[      $swing2,                ogre_swing3     ] {ai_charge(1);};
  262. void() ogre_swing3      =[      $swing3,                ogre_swing4     ] {ai_charge(4);};
  263. void() ogre_swing4      =[      $swing4,                ogre_swing5     ] {ai_charge(13);};
  264. void() ogre_swing5      =[      $swing5,                ogre_swing6     ] {ai_charge(9); chainsaw(0);self.angles_y = self.angles_y + random()*25;};
  265. void() ogre_swing6      =[      $swing6,                ogre_swing7     ] {chainsaw(200);self.angles_y = self.angles_y + random()* 25;};
  266. void() ogre_swing7      =[      $swing7,                ogre_swing8     ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  267. void() ogre_swing8      =[      $swing8,                ogre_swing9     ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  268. void() ogre_swing9      =[      $swing9,                ogre_swing10 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  269. void() ogre_swing10     =[      $swing10,               ogre_swing11 ] {chainsaw(-200);self.angles_y = self.angles_y + random()* 25;};
  270. void() ogre_swing11     =[      $swing11,               ogre_swing12 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  271. void() ogre_swing12     =[      $swing12,               ogre_swing13 ] {ai_charge(3);};
  272. void() ogre_swing13     =[      $swing13,               ogre_swing14 ] {ai_charge(8);};
  273. void() ogre_swing14     =[      $swing14,               ogre_run1       ] {ai_charge(9);};
  274.  
  275. void() ogre_smash1      =[      $smash1,                ogre_smash2     ] {ai_charge(6);
  276. sound (self, CHAN_WEAPON, "ogre/ogsawatk.wav", 1, ATTN_NORM);
  277. };
  278. void() ogre_smash2      =[      $smash2,                ogre_smash3     ] {ai_charge(0);};
  279. void() ogre_smash3      =[      $smash3,                ogre_smash4     ] {ai_charge(0);};
  280. void() ogre_smash4      =[      $smash4,                ogre_smash5     ] {ai_charge(1);};
  281. void() ogre_smash5      =[      $smash5,                ogre_smash6     ] {ai_charge(4);};
  282. void() ogre_smash6      =[      $smash6,                ogre_smash7     ] {ai_charge(4); chainsaw(0);};
  283. void() ogre_smash7      =[      $smash7,                ogre_smash8     ] {ai_charge(4); chainsaw(0);};
  284. void() ogre_smash8      =[      $smash8,                ogre_smash9     ] {ai_charge(10); chainsaw(0);};
  285. void() ogre_smash9      =[      $smash9,                ogre_smash10 ] {ai_charge(13); chainsaw(0);};
  286. void() ogre_smash10     =[      $smash10,               ogre_smash11 ] {chainsaw(1);};
  287. void() ogre_smash11     =[      $smash11,               ogre_smash12 ] {ai_charge(2); chainsaw(0);
  288. self.nextthink = self.nextthink + random()*0.2;};       // slight variation
  289. void() ogre_smash12     =[      $smash12,               ogre_smash13 ] {ai_charge();};
  290. void() ogre_smash13     =[      $smash13,               ogre_smash14 ] {ai_charge(4);};
  291. void() ogre_smash14     =[      $smash14,               ogre_run1       ] {ai_charge(12);};
  292.  
  293. void() ogre_nail1       =[      $shoot1,                ogre_nail2      ] {ai_face();};
  294. void() ogre_nail2       =[      $shoot2,                ogre_nail3      ] {ai_face();};
  295. void() ogre_nail3       =[      $shoot2,                ogre_nail4      ] {ai_face();};
  296. void() ogre_nail4       =[      $shoot3,                ogre_nail5      ] {ai_face();OgreFireGrenade();};
  297. void() ogre_nail5       =[      $shoot4,                ogre_nail6      ] {ai_face();};
  298. void() ogre_nail6       =[      $shoot5,                ogre_nail7      ] {ai_face();};
  299. void() ogre_nail7       =[      $shoot6,                ogre_run1       ] {ai_face();};
  300.  
  301. void()  ogre_pain1      =[      $pain1,         ogre_pain2      ] {};
  302. void()  ogre_pain2      =[      $pain2,         ogre_pain3      ] {};
  303. void()  ogre_pain3      =[      $pain3,         ogre_pain4      ] {};
  304. void()  ogre_pain4      =[      $pain4,         ogre_pain5      ] {};
  305. void()  ogre_pain5      =[      $pain5,         ogre_run1       ] {};
  306.  
  307.  
  308. void()  ogre_painb1     =[      $painb1,        ogre_painb2     ] {};
  309. void()  ogre_painb2     =[      $painb2,        ogre_painb3     ] {};
  310. void()  ogre_painb3     =[      $painb3,        ogre_run1       ] {};
  311.  
  312.  
  313. void()  ogre_painc1     =[      $painc1,        ogre_painc2     ] {};
  314. void()  ogre_painc2     =[      $painc2,        ogre_painc3     ] {};
  315. void()  ogre_painc3     =[      $painc3,        ogre_painc4     ] {};
  316. void()  ogre_painc4     =[      $painc4,        ogre_painc5     ] {};
  317. void()  ogre_painc5     =[      $painc5,        ogre_painc6     ] {};
  318. void()  ogre_painc6     =[      $painc6,        ogre_run1       ] {};
  319.  
  320.  
  321. void()  ogre_paind1     =[      $paind1,        ogre_paind2     ] {};
  322. void()  ogre_paind2     =[      $paind2,        ogre_paind3     ] {ai_pain(10);};
  323. void()  ogre_paind3     =[      $paind3,        ogre_paind4     ] {ai_pain(9);};
  324. void()  ogre_paind4     =[      $paind4,        ogre_paind5     ] {ai_pain(4);};
  325. void()  ogre_paind5     =[      $paind5,        ogre_paind6     ] {};
  326. void()  ogre_paind6     =[      $paind6,        ogre_paind7     ] {};
  327. void()  ogre_paind7     =[      $paind7,        ogre_paind8     ] {};
  328. void()  ogre_paind8     =[      $paind8,        ogre_paind9     ] {};
  329. void()  ogre_paind9     =[      $paind9,        ogre_paind10    ] {};
  330. void()  ogre_paind10=[  $paind10,       ogre_paind11    ] {};
  331. void()  ogre_paind11=[  $paind11,       ogre_paind12    ] {};
  332. void()  ogre_paind12=[  $paind12,       ogre_paind13    ] {};
  333. void()  ogre_paind13=[  $paind13,       ogre_paind14    ] {};
  334. void()  ogre_paind14=[  $paind14,       ogre_paind15    ] {};
  335. void()  ogre_paind15=[  $paind15,       ogre_paind16    ] {};
  336. void()  ogre_paind16=[  $paind16,       ogre_run1       ] {};
  337.  
  338. void()  ogre_paine1     =[      $paine1,        ogre_paine2     ] {};
  339. void()  ogre_paine2     =[      $paine2,        ogre_paine3     ] {ai_pain(10);};
  340. void()  ogre_paine3     =[      $paine3,        ogre_paine4     ] {ai_pain(9);};
  341. void()  ogre_paine4     =[      $paine4,        ogre_paine5     ] {ai_pain(4);};
  342. void()  ogre_paine5     =[      $paine5,        ogre_paine6     ] {};
  343. void()  ogre_paine6     =[      $paine6,        ogre_paine7     ] {};
  344. void()  ogre_paine7     =[      $paine7,        ogre_paine8     ] {};
  345. void()  ogre_paine8     =[      $paine8,        ogre_paine9     ] {};
  346. void()  ogre_paine9     =[      $paine9,        ogre_paine10    ] {};
  347. void()  ogre_paine10=[  $paine10,       ogre_paine11    ] {};
  348. void()  ogre_paine11=[  $paine11,       ogre_paine12    ] {};
  349. void()  ogre_paine12=[  $paine12,       ogre_paine13    ] {};
  350. void()  ogre_paine13=[  $paine13,       ogre_paine14    ] {};
  351. void()  ogre_paine14=[  $paine14,       ogre_paine15    ] {};
  352. void()  ogre_paine15=[  $paine15,       ogre_run1       ] {};
  353.  
  354.  
  355. void(entity attacker, float damage)     ogre_pain =
  356. {
  357.     local float     r;
  358.  
  359. // don't make multiple pain sounds right after each other
  360.     if (self.pain_finished > time)
  361.         return;
  362.  
  363.     sound (self, CHAN_VOICE, "ogre/ogpain1.wav", 1, ATTN_NORM);             
  364.  
  365.     r = random();
  366.     
  367.     if (r < 0.25)
  368.     {
  369.         ogre_pain1 ();
  370.         self.pain_finished = time + 1;
  371.     }
  372.     else if (r < 0.5)
  373.     {
  374.         ogre_painb1 ();
  375.         self.pain_finished = time + 1;
  376.     }
  377.     else if (r < 0.75)
  378.     {
  379.         ogre_painc1 ();
  380.         self.pain_finished = time + 1;
  381.     }
  382.     else if (r < 0.88)
  383.     {
  384.         ogre_paind1 ();
  385.         self.pain_finished = time + 2;
  386.     }
  387.     else
  388.     {
  389.         ogre_paine1 ();
  390.         self.pain_finished = time + 2;
  391.     }
  392. };
  393.  
  394. void()  ogre_die1       =[      $death1,        ogre_die2       ] {};
  395. void()  ogre_die2       =[      $death2,        ogre_die3       ] {};
  396. void()  ogre_die3       =[      $death3,        ogre_die4       ]
  397. {self.solid = SOLID_NOT;
  398. self.ammo_rockets = 2;DropBackpack();};
  399. void()  ogre_die4       =[      $death4,        ogre_die5       ] {};
  400. void()  ogre_die5       =[      $death5,        ogre_die6       ] {};
  401. void()  ogre_die6       =[      $death6,        ogre_die7       ] {};
  402. void()  ogre_die7       =[      $death7,        ogre_die8       ] {};
  403. void()  ogre_die8       =[      $death8,        ogre_die9       ] {};
  404. void()  ogre_die9       =[      $death9,        ogre_die10      ] {};
  405. void()  ogre_die10      =[      $death10,       ogre_die11      ] {};
  406. void()  ogre_die11      =[      $death11,       ogre_die12      ] {};
  407. void()  ogre_die12      =[      $death12,       ogre_die13      ] {};
  408. void()  ogre_die13      =[      $death13,       ogre_die14      ] {};
  409. void()  ogre_die14      =[      $death14,       ogre_die14      ] {};
  410.  
  411. void()  ogre_bdie1      =[      $bdeath1,       ogre_bdie2      ] {};
  412. void()  ogre_bdie2      =[      $bdeath2,       ogre_bdie3      ] {ai_forward(5);};
  413. void()  ogre_bdie3      =[      $bdeath3,       ogre_bdie4      ]
  414. {self.solid = SOLID_NOT;
  415. self.ammo_rockets = 2;DropBackpack();};
  416. void()  ogre_bdie4      =[      $bdeath4,       ogre_bdie5      ] {ai_forward(1);};
  417. void()  ogre_bdie5      =[      $bdeath5,       ogre_bdie6      ] {ai_forward(3);};
  418. void()  ogre_bdie6      =[      $bdeath6,       ogre_bdie7      ] {ai_forward(7);};
  419. void()  ogre_bdie7      =[      $bdeath7,       ogre_bdie8      ] {ai_forward(25);};
  420. void()  ogre_bdie8      =[      $bdeath8,       ogre_bdie9      ] {};
  421. void()  ogre_bdie9      =[      $bdeath9,       ogre_bdie10     ] {};
  422. void()  ogre_bdie10     =[      $bdeath10,      ogre_bdie10     ] {};
  423.  
  424. void() ogre_die =
  425. {
  426. // check for gib
  427.     if (self.health < -80)
  428.     {
  429.         sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  430.         ThrowHead ("progs/h_ogre.mdl", self.health);
  431.         ThrowGib ("progs/gib3.mdl", self.health);
  432.         ThrowGib ("progs/gib3.mdl", self.health);
  433.         ThrowGib ("progs/gib3.mdl", self.health);
  434.         return;
  435.     }
  436.  
  437.     sound (self, CHAN_VOICE, "ogre/ogdth.wav", 1, ATTN_NORM);
  438.     
  439.     if (random() < 0.5)
  440.         ogre_die1 ();
  441.     else
  442.         ogre_bdie1 ();
  443. };
  444.  
  445. void() ogre_melee =
  446. {
  447.     if (random() > 0.5)
  448.         ogre_smash1 ();
  449.     else
  450.         ogre_swing1 ();
  451. };
  452.  
  453.  
  454. /*QUAKED monster_ogre (1 0 0) (-32 -32 -24) (32 32 64) Ambush
  455.  
  456. */
  457. void() monster_ogre =
  458. {
  459.     if (deathmatch)
  460.     {
  461.         remove(self);
  462.         return;
  463.     }
  464.     precache_model ("progs/ogre.mdl");
  465.     precache_model ("progs/h_ogre.mdl");
  466.     precache_model ("progs/grenade.mdl");
  467.  
  468.     precache_sound ("ogre/ogdrag.wav");
  469.     precache_sound ("ogre/ogdth.wav");
  470.     precache_sound ("ogre/ogidle.wav");
  471.     precache_sound ("ogre/ogidle2.wav");
  472.     precache_sound ("ogre/ogpain1.wav");
  473.     precache_sound ("ogre/ogsawatk.wav");
  474.     precache_sound ("ogre/ogwake.wav");
  475.  
  476.     self.solid = SOLID_SLIDEBOX;
  477.     self.movetype = MOVETYPE_STEP;
  478.  
  479.     setmodel (self, "progs/ogre.mdl");
  480.  
  481.     setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
  482.     self.health = 200;
  483.  
  484.     self.th_stand = ogre_stand1;
  485.     self.th_walk = ogre_walk1;
  486.     self.th_run = ogre_run1;
  487.     self.th_die = ogre_die;
  488.     self.th_melee = ogre_melee;
  489.     self.th_missile = ogre_nail1;
  490.     self.th_pain = ogre_pain;
  491.     
  492.     walkmonster_start();
  493. };
  494.  
  495. void() monster_ogre_marksman =
  496. {
  497.     monster_ogre ();
  498. };
  499.  
  500.  
  501.